创建客户端(默认内存存储,重启后数据消失)

89 字

🤖 Assistant

根据你的需求(部署简单、免费、适合个人用户),推荐以下两款向量数据库,并给出详细使用步骤:


推荐选择 1:Chroma(轻量级,适合快速上手)

理由
- 纯Python实现,无需额外依赖,pip安装即可使用。
- 完全开源免费,支持本地运行,无云服务成本。
- 专为AI应用设计(如LangChain集成),适合RAG等实验场景。

使用步骤

1. 安装Chroma
pip install chromadb  # 安装Chroma核心库
pip install sentence-transformers  # 可选:用于生成文本嵌入
2. 启动本地Chroma服务
import chromadb

# 创建客户端(默认内存存储,重启后数据消失)
client = chromadb.Client()

# 持久化存储(可选,数据保存到磁盘)
# client = chromadb.PersistentClient(path="./chroma_db")
3. 创建集合(Collection)并插入数据
from sentence_transformers import SentenceTransformer

# 加载嵌入模型(小型BERT模型,适合本地运行)
model = SentenceTransformer('all-MiniLM-L6-v2')

# 创建集合
collection = client.create_collection(name="my_documents")

# 添加文本和嵌入向量
documents = [
    "AI is transforming the tech industry.",
    "Machine learning requires large datasets.",
    "Chroma is a lightweight vector database."
]
embeddings = model.encode(documents).tolist()  # 生成嵌入向量

# 插入数据(需提供ID、文本、嵌入向量)
collection.add(
    documents=documents,
    embeddings=embeddings,
    ids=["id1", "id2", "id3"]
)
4. 执行相似性搜索
# 查询与目标文本相似的文档
query = "What is AI's impact on technology?"
query_embedding = model.encode(query).tolist()

results = collection.query(
    query_embeddings=[query_embedding],
    n_results=2  # 返回Top-2结果
)

# 输出结果
print(results["documents"])
# 示例输出:["AI is transforming the tech industry.", ...]
5. 保存和加载数据(持久化模式)
# 持久化客户端会自动保存数据到磁盘
# 下次启动时用相同路径加载即可恢复数据
# client = chromadb.PersistentClient(path="./chroma_db")

推荐选择 2:FAISS + SQLite(本地高性能方案)

理由
- FAISS是Meta开源的向量搜索库,性能极高(支持GPU加速)。
- 结合SQLite可低成本实现持久化存储。

使用步骤

1. 安装依赖
pip install faiss-cpu  # CPU版本(若用GPU则安装faiss-gpu)
pip install sentence-transformers
2. 创建FAISS索引并存储
import faiss
import numpy as np
from sentence_transformers import SentenceTransformer

# 生成示例嵌入向量
model = SentenceTransformer('all-MiniLM-L6-v2')
documents = ["AI is...", "Machine learning...", "Chroma is..."]
embeddings = model.encode(documents)

# 创建FAISS索引(L2距离度量)
dimension = embeddings.shape[1]
index = faiss.IndexFlatL2(dimension)
index.add(embeddings)  # 添加向量

# 保存索引到磁盘
faiss.write_index(index, "my_index.faiss")
3. 加载索引并搜索
# 加载索引
index = faiss.read_index("my_index.faiss")

# 查询向量
query = "What is AI's impact on technology?"
query_embedding = model.encode(query).reshape(1, -1)
k = 2  # 返回2个最近邻
distances, indices = index.search(query_embedding, k)

# 输出结果
print("最相似的文档ID:", indices[0].tolist())
print("距离:", distances[0].tolist())
4. 持久化扩展(结合SQLite)
  • 用SQLite存储原始文本和ID,FAISS只存向量。
  • 搜索时通过FAISS返回的indices从SQLite中检索对应文本。

对比总结

特性 Chroma FAISS + SQLite
部署复杂度 极简(纯Python) 中等(需管理索引和数据库)
持久化 支持(需显式启用) 需手动结合SQLite实现
性能 适合小规模数据(<1M向量) 高性能(支持亿级向量)
适用场景 快速原型开发、RAG实验 需要高性能搜索的研究项目

最终建议

  • 优先选择Chroma:如果你的目标是快速验证RAG或语义搜索流程,Chroma的易用性和LangChain集成(Chroma.from_documents())能极大简化开发。
  • 选择FAISS:若需要处理更大规模数据或研究向量搜索算法(如量化、聚类),FAISS更灵活。

两种方案均无需付费,代码示例可直接运行,适合个人研究者!